
#   Copyright 2010 Matthew Hawn

#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at

#       http://www.apache.org/licenses/LICENSE-2.0

#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

# Generated from CL/cl.h by generate.py.
include "cl_platform.pxi"
cdef extern from "CL/cl.h" nogil:
    ctypedef void_ptr cl_platform_id
    ctypedef void_ptr cl_device_id
    ctypedef void_ptr cl_context
    ctypedef void_ptr cl_command_queue
    ctypedef void_ptr cl_mem
    ctypedef void_ptr cl_program
    ctypedef void_ptr cl_kernel
    ctypedef void_ptr cl_event
    ctypedef void_ptr cl_sampler

    ctypedef cl_uint cl_bool
    ctypedef cl_ulong cl_bitfield
    ctypedef cl_bitfield cl_device_type
    ctypedef cl_uint cl_platform_info
    ctypedef cl_uint cl_device_info
    ctypedef cl_bitfield cl_device_address_info
    ctypedef cl_bitfield cl_device_fp_config
    ctypedef cl_uint cl_device_mem_cache_type
    ctypedef cl_uint cl_device_local_mem_type
    ctypedef cl_bitfield cl_device_exec_capabilities
    ctypedef cl_bitfield cl_command_queue_properties
    ctypedef intptr_t cl_context_properties
    ctypedef cl_uint cl_context_info
    ctypedef cl_uint cl_command_queue_info
    ctypedef cl_uint cl_channel_order
    ctypedef cl_uint cl_channel_type
    ctypedef cl_bitfield cl_mem_flags
    ctypedef cl_uint cl_mem_object_type
    ctypedef cl_uint cl_mem_info
    ctypedef cl_uint cl_image_info
    ctypedef cl_uint cl_addressing_mode
    ctypedef cl_uint cl_filter_mode
    ctypedef cl_uint cl_sampler_info
    ctypedef cl_bitfield cl_map_flags
    ctypedef cl_uint cl_program_info
    ctypedef cl_uint cl_program_build_info
    ctypedef cl_int cl_build_status
    ctypedef cl_uint cl_kernel_info
    ctypedef cl_uint cl_kernel_work_group_info
    ctypedef cl_uint cl_event_info
    ctypedef cl_uint cl_command_type
    ctypedef cl_uint cl_profiling_info


    ctypedef struct cl_image_format:
        cl_channel_order        image_channel_order
        cl_channel_type         image_channel_data_type
        
    #addressing_mode
    cl_uint CL_ADDRESS_NONE
    cl_uint CL_ADDRESS_CLAMP_TO_EDGE
    cl_uint CL_ADDRESS_CLAMP
    cl_uint CL_ADDRESS_REPEAT

    #bool
    cl_uint CL_FALSE
    cl_uint CL_TRUE

    #build_status
    cl_int CL_BUILD_SUCCESS
    cl_int CL_BUILD_NONE
    cl_int CL_BUILD_ERROR
    cl_int CL_BUILD_IN_PROGRESS

    #channel_order
    cl_uint CL_R
    cl_uint CL_A
    cl_uint CL_RG
    cl_uint CL_RA
    cl_uint CL_RGB
    cl_uint CL_RGBA
    cl_uint CL_BGRA
    cl_uint CL_ARGB
    cl_uint CL_INTENSITY
    cl_uint CL_LUMINANCE

    #channel_type
    cl_uint CL_SNORM_INT8
    cl_uint CL_SNORM_INT16
    cl_uint CL_UNORM_INT8
    cl_uint CL_UNORM_INT16
    cl_uint CL_UNORM_SHORT_565
    cl_uint CL_UNORM_SHORT_555
    cl_uint CL_UNORM_INT_101010
    cl_uint CL_SIGNED_INT8
    cl_uint CL_SIGNED_INT16
    cl_uint CL_SIGNED_INT32
    cl_uint CL_UNSIGNED_INT8
    cl_uint CL_UNSIGNED_INT16
    cl_uint CL_UNSIGNED_INT32
    cl_uint CL_HALF_FLOAT
    cl_uint CL_FLOAT

    #cl_error?
    cl_int CL_SUCCESS
    cl_int CL_DEVICE_NOT_FOUND
    cl_int CL_DEVICE_NOT_AVAILABLE
    cl_int CL_COMPILER_NOT_AVAILABLE
    cl_int CL_MEM_OBJECT_ALLOCATION_FAILURE
    cl_int CL_OUT_OF_RESOURCES
    cl_int CL_OUT_OF_HOST_MEMORY
    cl_int CL_PROFILING_INFO_NOT_AVAILABLE
    cl_int CL_MEM_COPY_OVERLAP
    cl_int CL_IMAGE_FORMAT_MISMATCH
    cl_int CL_IMAGE_FORMAT_NOT_SUPPORTED
    cl_int CL_BUILD_PROGRAM_FAILURE
    cl_int CL_MAP_FAILURE
    cl_int CL_INVALID_VALUE
    cl_int CL_INVALID_DEVICE_TYPE
    cl_int CL_INVALID_PLATFORM
    cl_int CL_INVALID_DEVICE
    cl_int CL_INVALID_CONTEXT
    cl_int CL_INVALID_QUEUE_PROPERTIES
    cl_int CL_INVALID_COMMAND_QUEUE
    cl_int CL_INVALID_HOST_PTR
    cl_int CL_INVALID_MEM_OBJECT
    cl_int CL_INVALID_IMAGE_FORMAT_DESCRIPTOR
    cl_int CL_INVALID_IMAGE_SIZE
    cl_int CL_INVALID_SAMPLER
    cl_int CL_INVALID_BINARY
    cl_int CL_INVALID_BUILD_OPTIONS
    cl_int CL_INVALID_PROGRAM
    cl_int CL_INVALID_PROGRAM_EXECUTABLE
    cl_int CL_INVALID_KERNEL_NAME
    cl_int CL_INVALID_KERNEL_DEFINITION
    cl_int CL_INVALID_KERNEL
    cl_int CL_INVALID_ARG_INDEX
    cl_int CL_INVALID_ARG_VALUE
    cl_int CL_INVALID_ARG_SIZE
    cl_int CL_INVALID_KERNEL_ARGS
    cl_int CL_INVALID_WORK_DIMENSION
    cl_int CL_INVALID_WORK_GROUP_SIZE
    cl_int CL_INVALID_WORK_ITEM_SIZE
    cl_int CL_INVALID_GLOBAL_OFFSET
    cl_int CL_INVALID_EVENT_WAIT_LIST
    cl_int CL_INVALID_EVENT
    cl_int CL_INVALID_OPERATION
    cl_int CL_INVALID_GL_OBJECT
    cl_int CL_INVALID_BUFFER_SIZE
    cl_int CL_INVALID_MIP_LEVEL
    cl_int CL_INVALID_GLOBAL_WORK_SIZE

    #cl_version?
    cl_int CL_VERSION_1_0

    #command_queue_info
    cl_uint CL_QUEUE_CONTEXT
    cl_uint CL_QUEUE_DEVICE
    cl_uint CL_QUEUE_REFERENCE_COUNT
    cl_uint CL_QUEUE_PROPERTIES

    #command_queue_properties
    cl_bitfield CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE
    cl_bitfield CL_QUEUE_PROFILING_ENABLE

    #command_status?
    cl_int CL_COMPLETE
    cl_int CL_RUNNING
    cl_int CL_SUBMITTED
    cl_int CL_QUEUED

    #command_type
    cl_uint CL_COMMAND_NDRANGE_KERNEL
    cl_uint CL_COMMAND_TASK
    cl_uint CL_COMMAND_NATIVE_KERNEL
    cl_uint CL_COMMAND_READ_BUFFER
    cl_uint CL_COMMAND_WRITE_BUFFER
    cl_uint CL_COMMAND_COPY_BUFFER
    cl_uint CL_COMMAND_READ_IMAGE
    cl_uint CL_COMMAND_WRITE_IMAGE
    cl_uint CL_COMMAND_COPY_IMAGE
    cl_uint CL_COMMAND_COPY_IMAGE_TO_BUFFER
    cl_uint CL_COMMAND_COPY_BUFFER_TO_IMAGE
    cl_uint CL_COMMAND_MAP_BUFFER
    cl_uint CL_COMMAND_MAP_IMAGE
    cl_uint CL_COMMAND_UNMAP_MEM_OBJECT
    cl_uint CL_COMMAND_MARKER
    cl_uint CL_COMMAND_ACQUIRE_GL_OBJECTS
    cl_uint CL_COMMAND_RELEASE_GL_OBJECTS

    #context_info
    cl_uint CL_CONTEXT_REFERENCE_COUNT
    cl_uint CL_CONTEXT_DEVICES
    cl_uint CL_CONTEXT_PROPERTIES

    #context_properties
    intptr_t CL_CONTEXT_PLATFORM

    #device_exec_capabilities
    cl_bitfield CL_EXEC_KERNEL
    cl_bitfield CL_EXEC_NATIVE_KERNEL

    #device_fp_config
    cl_bitfield CL_FP_DENORM
    cl_bitfield CL_FP_INF_NAN
    cl_bitfield CL_FP_ROUND_TO_NEAREST
    cl_bitfield CL_FP_ROUND_TO_ZERO
    cl_bitfield CL_FP_ROUND_TO_INF
    cl_bitfield CL_FP_FMA

    #device_info
    cl_uint CL_DEVICE_TYPE
    cl_uint CL_DEVICE_VENDOR_ID
    cl_uint CL_DEVICE_MAX_COMPUTE_UNITS
    cl_uint CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS
    cl_uint CL_DEVICE_MAX_WORK_GROUP_SIZE
    cl_uint CL_DEVICE_MAX_WORK_ITEM_SIZES
    cl_uint CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR
    cl_uint CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT
    cl_uint CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT
    cl_uint CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG
    cl_uint CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT
    cl_uint CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE
    cl_uint CL_DEVICE_MAX_CLOCK_FREQUENCY
    cl_uint CL_DEVICE_ADDRESS_BITS
    cl_uint CL_DEVICE_MAX_READ_IMAGE_ARGS
    cl_uint CL_DEVICE_MAX_WRITE_IMAGE_ARGS
    cl_uint CL_DEVICE_MAX_MEM_ALLOC_SIZE
    cl_uint CL_DEVICE_IMAGE2D_MAX_WIDTH
    cl_uint CL_DEVICE_IMAGE2D_MAX_HEIGHT
    cl_uint CL_DEVICE_IMAGE3D_MAX_WIDTH
    cl_uint CL_DEVICE_IMAGE3D_MAX_HEIGHT
    cl_uint CL_DEVICE_IMAGE3D_MAX_DEPTH
    cl_uint CL_DEVICE_IMAGE_SUPPORT
    cl_uint CL_DEVICE_MAX_PARAMETER_SIZE
    cl_uint CL_DEVICE_MAX_SAMPLERS
    cl_uint CL_DEVICE_MEM_BASE_ADDR_ALIGN
    cl_uint CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE
    cl_uint CL_DEVICE_SINGLE_FP_CONFIG
    cl_uint CL_DEVICE_GLOBAL_MEM_CACHE_TYPE
    cl_uint CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE
    cl_uint CL_DEVICE_GLOBAL_MEM_CACHE_SIZE
    cl_uint CL_DEVICE_GLOBAL_MEM_SIZE
    cl_uint CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE
    cl_uint CL_DEVICE_MAX_CONSTANT_ARGS
    cl_uint CL_DEVICE_LOCAL_MEM_TYPE
    cl_uint CL_DEVICE_LOCAL_MEM_SIZE
    cl_uint CL_DEVICE_ERROR_CORRECTION_SUPPORT
    cl_uint CL_DEVICE_PROFILING_TIMER_RESOLUTION
    cl_uint CL_DEVICE_ENDIAN_LITTLE
    cl_uint CL_DEVICE_AVAILABLE
    cl_uint CL_DEVICE_COMPILER_AVAILABLE
    cl_uint CL_DEVICE_EXECUTION_CAPABILITIES
    cl_uint CL_DEVICE_QUEUE_PROPERTIES
    cl_uint CL_DEVICE_NAME
    cl_uint CL_DEVICE_VENDOR
    cl_uint CL_DRIVER_VERSION
    cl_uint CL_DEVICE_PROFILE
    cl_uint CL_DEVICE_VERSION
    cl_uint CL_DEVICE_EXTENSIONS
    cl_uint CL_DEVICE_PLATFORM

    #device_local_mem_type
    cl_uint CL_LOCAL
    cl_uint CL_GLOBAL

    #device_mem_cache_type
    cl_uint CL_NONE
    cl_uint CL_READ_ONLY_CACHE
    cl_uint CL_READ_WRITE_CACHE

    #device_type
    cl_bitfield CL_DEVICE_TYPE_DEFAULT
    cl_bitfield CL_DEVICE_TYPE_CPU
    cl_bitfield CL_DEVICE_TYPE_GPU
    cl_bitfield CL_DEVICE_TYPE_ACCELERATOR
    cl_bitfield CL_DEVICE_TYPE_ALL

    #event_info
    cl_uint CL_EVENT_COMMAND_QUEUE
    cl_uint CL_EVENT_COMMAND_TYPE
    cl_uint CL_EVENT_REFERENCE_COUNT
    cl_uint CL_EVENT_COMMAND_EXECUTION_STATUS

    #filter_mode
    cl_uint CL_FILTER_NEAREST
    cl_uint CL_FILTER_LINEAR

    #image_info
    cl_uint CL_IMAGE_FORMAT
    cl_uint CL_IMAGE_ELEMENT_SIZE
    cl_uint CL_IMAGE_ROW_PITCH
    cl_uint CL_IMAGE_SLICE_PITCH
    cl_uint CL_IMAGE_WIDTH
    cl_uint CL_IMAGE_HEIGHT
    cl_uint CL_IMAGE_DEPTH

    #kernel_info
    cl_uint CL_KERNEL_FUNCTION_NAME
    cl_uint CL_KERNEL_NUM_ARGS
    cl_uint CL_KERNEL_REFERENCE_COUNT
    cl_uint CL_KERNEL_CONTEXT
    cl_uint CL_KERNEL_PROGRAM

    #kernel_work_group_info
    cl_uint CL_KERNEL_WORK_GROUP_SIZE
    cl_uint CL_KERNEL_COMPILE_WORK_GROUP_SIZE
    cl_uint CL_KERNEL_LOCAL_MEM_SIZE

    #map_flags
    cl_bitfield CL_MAP_READ
    cl_bitfield CL_MAP_WRITE

    #mem_flags
    cl_bitfield CL_MEM_READ_WRITE
    cl_bitfield CL_MEM_WRITE_ONLY
    cl_bitfield CL_MEM_READ_ONLY
    cl_bitfield CL_MEM_USE_HOST_PTR
    cl_bitfield CL_MEM_ALLOC_HOST_PTR
    cl_bitfield CL_MEM_COPY_HOST_PTR

    #mem_info
    cl_uint CL_MEM_TYPE
    cl_uint CL_MEM_FLAGS
    cl_uint CL_MEM_SIZE
    cl_uint CL_MEM_HOST_PTR
    cl_uint CL_MEM_MAP_COUNT
    cl_uint CL_MEM_REFERENCE_COUNT
    cl_uint CL_MEM_CONTEXT

    #mem_object_type
    cl_uint CL_MEM_OBJECT_BUFFER
    cl_uint CL_MEM_OBJECT_IMAGE2D
    cl_uint CL_MEM_OBJECT_IMAGE3D

    #platform_info
    cl_uint CL_PLATFORM_PROFILE
    cl_uint CL_PLATFORM_VERSION
    cl_uint CL_PLATFORM_NAME
    cl_uint CL_PLATFORM_VENDOR
    cl_uint CL_PLATFORM_EXTENSIONS

    #profiling_info
    cl_uint CL_PROFILING_COMMAND_QUEUED
    cl_uint CL_PROFILING_COMMAND_SUBMIT
    cl_uint CL_PROFILING_COMMAND_START
    cl_uint CL_PROFILING_COMMAND_END

    #program_build_info
    cl_uint CL_PROGRAM_BUILD_STATUS
    cl_uint CL_PROGRAM_BUILD_OPTIONS
    cl_uint CL_PROGRAM_BUILD_LOG

    #program_info
    cl_uint CL_PROGRAM_REFERENCE_COUNT
    cl_uint CL_PROGRAM_CONTEXT
    cl_uint CL_PROGRAM_NUM_DEVICES
    cl_uint CL_PROGRAM_DEVICES
    cl_uint CL_PROGRAM_SOURCE
    cl_uint CL_PROGRAM_BINARY_SIZES
    cl_uint CL_PROGRAM_BINARIES

    #sampler_info
    cl_uint CL_SAMPLER_REFERENCE_COUNT
    cl_uint CL_SAMPLER_CONTEXT
    cl_uint CL_SAMPLER_NORMALIZED_COORDS
    cl_uint CL_SAMPLER_ADDRESSING_MODE
    cl_uint CL_SAMPLER_FILTER_MODE

    cl_int clBuildProgram(
        cl_program,
        cl_uint             ,
        cl_device_id *,
        char *,
        void *,
        void *)
    cl_mem clCreateBuffer(
        cl_context,
        cl_mem_flags,
        size_t      ,
        void *,
        cl_int *)
    cl_command_queue clCreateCommandQueue(
        cl_context,
        cl_device_id                  ,
        cl_command_queue_properties   ,
        cl_int *)
    cl_context clCreateContext(
        cl_context_properties *,
        cl_uint                      ,
        cl_device_id *,
        void *,
        void *,
        cl_int *)
    cl_context clCreateContextFromType(
        cl_context_properties *,
        cl_device_type               ,
        void *,
        void *,
        cl_int *)
    cl_mem clCreateImage2D(
        cl_context,
        cl_mem_flags           ,
        cl_image_format *,
        size_t                 ,
        size_t                 ,
        size_t                 ,
        void *,
        cl_int *)
    cl_mem clCreateImage3D(
        cl_context,
        cl_mem_flags           ,
        cl_image_format *,
        size_t                 ,
        size_t                 ,
        size_t                 ,
        size_t                 ,
        size_t                 ,
        void *,
        cl_int *)
    cl_kernel clCreateKernel(
        cl_program,
        char *,
        cl_int *)
    cl_int clCreateKernelsInProgram(
        cl_program,
        cl_uint       ,
        cl_kernel *,
        cl_uint *)
    cl_program clCreateProgramWithBinary(
        cl_context,
        cl_uint                       ,
        cl_device_id *,
        size_t *,
        cl_int *,
        cl_int *)
    cl_program clCreateProgramWithSource(
        cl_context,
        cl_uint          ,
        char **,
        size_t *,
        cl_int *)
    cl_sampler clCreateSampler(
        cl_context,
        cl_bool            ,
        cl_addressing_mode ,
        cl_filter_mode     ,
        cl_int *)
    cl_int clEnqueueBarrier(
        cl_command_queue)
    cl_int clEnqueueCopyBuffer(
        cl_command_queue,
        cl_mem             ,
        cl_mem             ,
        size_t             ,
        size_t             ,
        size_t             ,
        cl_uint            ,
        cl_event *,
        cl_event *)
    cl_int clEnqueueCopyBufferToImage(
        cl_command_queue,
        cl_mem          ,
        cl_mem          ,
        size_t          ,
        size_t *,
        size_t *,
        cl_uint         ,
        cl_event *,
        cl_event *)
    cl_int clEnqueueCopyImage(
        cl_command_queue,
        cl_mem              ,
        cl_mem              ,
        size_t *,
        size_t *,
        size_t *,
        cl_uint             ,
        cl_event *,
        cl_event *)
    cl_int clEnqueueCopyImageToBuffer(
        cl_command_queue,
        cl_mem          ,
        cl_mem          ,
        size_t *,
        size_t *,
        size_t          ,
        cl_uint         ,
        cl_event *,
        cl_event *)
    void * clEnqueueMapBuffer(
        cl_command_queue,
        cl_mem          ,
        cl_bool         ,
        cl_map_flags    ,
        size_t          ,
        size_t          ,
        cl_uint         ,
        cl_event *,
        cl_event *,
        cl_int *)
    void * clEnqueueMapImage(
        cl_command_queue,
        cl_mem           ,
        cl_bool          ,
        cl_map_flags     ,
        size_t *,
        size_t *,
        size_t *,
        size_t *,
        cl_uint          ,
        cl_event *,
        cl_event *,
        cl_int *)
    cl_int clEnqueueMarker(
        cl_command_queue,
        cl_event *)
    cl_int clEnqueueNDRangeKernel(
        cl_command_queue,
        cl_kernel       ,
        cl_uint         ,
        size_t *,
        size_t *,
        size_t *,
        cl_uint         ,
        cl_event *,
        cl_event *)
    cl_int clEnqueueNativeKernel(
        cl_command_queue,
        void *,
        void *,
        size_t           ,
        cl_uint          ,
        cl_mem *,
        void **,
        cl_uint          ,
        cl_event *,
        cl_event *)
    cl_int clEnqueueReadBuffer(
        cl_command_queue,
        cl_mem             ,
        cl_bool            ,
        size_t             ,
        size_t             ,
        void *,
        cl_uint            ,
        cl_event *,
        cl_event *)
    cl_int clEnqueueReadImage(
        cl_command_queue,
        cl_mem              ,
        cl_bool             ,
        size_t *,
        size_t *,
        size_t              ,
        size_t              ,
        void *,
        cl_uint             ,
        cl_event *,
        cl_event *)
    cl_int clEnqueueTask(
        cl_command_queue,
        cl_kernel        ,
        cl_uint          ,
        cl_event *,
        cl_event *)
    cl_int clEnqueueUnmapMemObject(
        cl_command_queue,
        cl_mem          ,
        void *,
        cl_uint         ,
        cl_event *,
        cl_event *)
    cl_int clEnqueueWaitForEvents(
        cl_command_queue,
        cl_uint         ,
        cl_event *)
    cl_int clEnqueueWriteBuffer(
        cl_command_queue,
        cl_mem            ,
        cl_bool           ,
        size_t            ,
        size_t            ,
        void *,
        cl_uint           ,
        cl_event *,
        cl_event *)
    cl_int clEnqueueWriteImage(
        cl_command_queue,
        cl_mem             ,
        cl_bool            ,
        size_t *,
        size_t *,
        size_t             ,
        size_t             ,
        void *,
        cl_uint            ,
        cl_event *,
        cl_event *)
    cl_int clFinish(
        cl_command_queue)
    cl_int clFlush(
        cl_command_queue)
    cl_int clGetCommandQueueInfo(
        cl_command_queue,
        cl_command_queue_info,
        size_t               ,
        void *,
        size_t *)
    cl_int clGetContextInfo(
        cl_context,
        cl_context_info   ,
        size_t            ,
        void *,
        size_t *)
    cl_int clGetDeviceIDs(
        cl_platform_id,
        cl_device_type  ,
        cl_uint         ,
        cl_device_id *,
        cl_uint *)
    cl_int clGetDeviceInfo(
        cl_device_id,
        cl_device_info ,
        size_t         ,
        void *,
        size_t *)
    cl_int clGetEventInfo(
        cl_event,
        cl_event_info   ,
        size_t          ,
        void *,
        size_t *)
    cl_int clGetEventProfilingInfo(
        cl_event,
        cl_profiling_info  ,
        size_t             ,
        void *,
        size_t *)
    cl_int clGetImageInfo(
        cl_mem,
        cl_image_info   ,
        size_t          ,
        void *,
        size_t *)
    cl_int clGetKernelInfo(
        cl_kernel,
        cl_kernel_info ,
        size_t         ,
        void *,
        size_t *)
    cl_int clGetKernelWorkGroupInfo(
        cl_kernel,
        cl_device_id              ,
        cl_kernel_work_group_info ,
        size_t                    ,
        void *,
        size_t *)
    cl_int clGetMemObjectInfo(
        cl_mem,
        cl_mem_info     ,
        size_t          ,
        void *,
        size_t *)
    cl_int clGetPlatformIDs(
        cl_uint,
        cl_platform_id *,
        cl_uint *)
    cl_int clGetPlatformInfo(
        cl_platform_id,
        cl_platform_info,
        size_t          ,
        void *,
        size_t *)
    cl_int clGetProgramBuildInfo(
        cl_program,
        cl_device_id         ,
        cl_program_build_info,
        size_t               ,
        void *,
        size_t *)
    cl_int clGetProgramInfo(
        cl_program,
        cl_program_info   ,
        size_t            ,
        void *,
        size_t *)
    cl_int clGetSamplerInfo(
        cl_sampler,
        cl_sampler_info   ,
        size_t            ,
        void *,
        size_t *)
    cl_int clGetSupportedImageFormats(
        cl_context,
        cl_mem_flags        ,
        cl_mem_object_type  ,
        cl_uint             ,
        cl_image_format *,
        cl_uint *)
    cl_int clReleaseCommandQueue(
        cl_command_queue)
    cl_int clReleaseContext(
        cl_context)
    cl_int clReleaseEvent(
        cl_event)
    cl_int clReleaseKernel(
        cl_kernel)
    cl_int clReleaseMemObject(
        cl_mem)
    cl_int clReleaseProgram(
        cl_program)
    cl_int clReleaseSampler(
        cl_sampler)
    cl_int clRetainCommandQueue(
        cl_command_queue)
    cl_int clRetainContext(
        cl_context)
    cl_int clRetainEvent(
        cl_event)
    cl_int clRetainKernel(
        cl_kernel)
    cl_int clRetainMemObject(
        cl_mem)
    cl_int clRetainProgram(
        cl_program)
    cl_int clRetainSampler(
        cl_sampler)
    cl_int clSetCommandQueueProperty(
        cl_command_queue,
        cl_command_queue_properties  ,
        cl_bool                       ,
        cl_command_queue_properties *)
    cl_int clSetKernelArg(
        cl_kernel,
        cl_uint     ,
        size_t      ,
        void *)
    cl_int clUnloadCompiler()
    cl_int clWaitForEvents(
        cl_uint,
        cl_event *)

cdef UIntConstantList c_addressing_mode = uint_constant_list_factory('addressing_mode', {
        "NONE": CL_ADDRESS_NONE,
        "CLAMP_TO_EDGE": CL_ADDRESS_CLAMP_TO_EDGE,
        "CLAMP": CL_ADDRESS_CLAMP,
        "REPEAT": CL_ADDRESS_REPEAT,
})
addressing_mode = c_addressing_mode

cdef UIntConstantList c_bool = uint_constant_list_factory('bool', {
        "FALSE": CL_FALSE,
        "TRUE": CL_TRUE,
})
bool = c_bool

cdef IntConstantList c_build_status = int_constant_list_factory('build_status', {
        "SUCCESS": CL_BUILD_SUCCESS,
        "NONE": CL_BUILD_NONE,
        "ERROR": CL_BUILD_ERROR,
        "IN_PROGRESS": CL_BUILD_IN_PROGRESS,
})
build_status = c_build_status

cdef UIntConstantList c_channel_order = uint_constant_list_factory('channel_order', {
        "R": CL_R,
        "A": CL_A,
        "RG": CL_RG,
        "RA": CL_RA,
        "RGB": CL_RGB,
        "RGBA": CL_RGBA,
        "BGRA": CL_BGRA,
        "ARGB": CL_ARGB,
        "INTENSITY": CL_INTENSITY,
        "LUMINANCE": CL_LUMINANCE,
})
channel_order = c_channel_order

cdef UIntConstantList c_channel_type = uint_constant_list_factory('channel_type', {
        "SNORM_INT8": CL_SNORM_INT8,
        "SNORM_INT16": CL_SNORM_INT16,
        "UNORM_INT8": CL_UNORM_INT8,
        "UNORM_INT16": CL_UNORM_INT16,
        "UNORM_SHORT_565": CL_UNORM_SHORT_565,
        "UNORM_SHORT_555": CL_UNORM_SHORT_555,
        "UNORM_INT_101010": CL_UNORM_INT_101010,
        "SIGNED_INT8": CL_SIGNED_INT8,
        "SIGNED_INT16": CL_SIGNED_INT16,
        "SIGNED_INT32": CL_SIGNED_INT32,
        "UNSIGNED_INT8": CL_UNSIGNED_INT8,
        "UNSIGNED_INT16": CL_UNSIGNED_INT16,
        "UNSIGNED_INT32": CL_UNSIGNED_INT32,
        "HALF_FLOAT": CL_HALF_FLOAT,
        "FLOAT": CL_FLOAT,
})
channel_type = c_channel_type

cdef ErrorList c_cl_error = error_list_factory('cl_error', {
        "SUCCESS": CL_SUCCESS,
        "DEVICE_NOT_FOUND": CL_DEVICE_NOT_FOUND,
        "DEVICE_NOT_AVAILABLE": CL_DEVICE_NOT_AVAILABLE,
        "COMPILER_NOT_AVAILABLE": CL_COMPILER_NOT_AVAILABLE,
        "MEM_OBJECT_ALLOCATION_FAILURE": CL_MEM_OBJECT_ALLOCATION_FAILURE,
        "OUT_OF_RESOURCES": CL_OUT_OF_RESOURCES,
        "OUT_OF_HOST_MEMORY": CL_OUT_OF_HOST_MEMORY,
        "PROFILING_INFO_NOT_AVAILABLE": CL_PROFILING_INFO_NOT_AVAILABLE,
        "MEM_COPY_OVERLAP": CL_MEM_COPY_OVERLAP,
        "IMAGE_FORMAT_MISMATCH": CL_IMAGE_FORMAT_MISMATCH,
        "IMAGE_FORMAT_NOT_SUPPORTED": CL_IMAGE_FORMAT_NOT_SUPPORTED,
        "BUILD_PROGRAM_FAILURE": CL_BUILD_PROGRAM_FAILURE,
        "MAP_FAILURE": CL_MAP_FAILURE,
        "INVALID_VALUE": CL_INVALID_VALUE,
        "INVALID_DEVICE_TYPE": CL_INVALID_DEVICE_TYPE,
        "INVALID_PLATFORM": CL_INVALID_PLATFORM,
        "INVALID_DEVICE": CL_INVALID_DEVICE,
        "INVALID_CONTEXT": CL_INVALID_CONTEXT,
        "INVALID_QUEUE_PROPERTIES": CL_INVALID_QUEUE_PROPERTIES,
        "INVALID_COMMAND_QUEUE": CL_INVALID_COMMAND_QUEUE,
        "INVALID_HOST_PTR": CL_INVALID_HOST_PTR,
        "INVALID_MEM_OBJECT": CL_INVALID_MEM_OBJECT,
        "INVALID_IMAGE_FORMAT_DESCRIPTOR": CL_INVALID_IMAGE_FORMAT_DESCRIPTOR,
        "INVALID_IMAGE_SIZE": CL_INVALID_IMAGE_SIZE,
        "INVALID_SAMPLER": CL_INVALID_SAMPLER,
        "INVALID_BINARY": CL_INVALID_BINARY,
        "INVALID_BUILD_OPTIONS": CL_INVALID_BUILD_OPTIONS,
        "INVALID_PROGRAM": CL_INVALID_PROGRAM,
        "INVALID_PROGRAM_EXECUTABLE": CL_INVALID_PROGRAM_EXECUTABLE,
        "INVALID_KERNEL_NAME": CL_INVALID_KERNEL_NAME,
        "INVALID_KERNEL_DEFINITION": CL_INVALID_KERNEL_DEFINITION,
        "INVALID_KERNEL": CL_INVALID_KERNEL,
        "INVALID_ARG_INDEX": CL_INVALID_ARG_INDEX,
        "INVALID_ARG_VALUE": CL_INVALID_ARG_VALUE,
        "INVALID_ARG_SIZE": CL_INVALID_ARG_SIZE,
        "INVALID_KERNEL_ARGS": CL_INVALID_KERNEL_ARGS,
        "INVALID_WORK_DIMENSION": CL_INVALID_WORK_DIMENSION,
        "INVALID_WORK_GROUP_SIZE": CL_INVALID_WORK_GROUP_SIZE,
        "INVALID_WORK_ITEM_SIZE": CL_INVALID_WORK_ITEM_SIZE,
        "INVALID_GLOBAL_OFFSET": CL_INVALID_GLOBAL_OFFSET,
        "INVALID_EVENT_WAIT_LIST": CL_INVALID_EVENT_WAIT_LIST,
        "INVALID_EVENT": CL_INVALID_EVENT,
        "INVALID_OPERATION": CL_INVALID_OPERATION,
        "INVALID_GL_OBJECT": CL_INVALID_GL_OBJECT,
        "INVALID_BUFFER_SIZE": CL_INVALID_BUFFER_SIZE,
        "INVALID_MIP_LEVEL": CL_INVALID_MIP_LEVEL,
        "INVALID_GLOBAL_WORK_SIZE": CL_INVALID_GLOBAL_WORK_SIZE,
})
cl_error = c_cl_error

cdef IntConstantList c_cl_version = int_constant_list_factory('cl_version', {
        "VERSION_1_0": CL_VERSION_1_0,
})
cl_version = c_cl_version

cdef UIntConstantList c_command_queue_info = uint_constant_list_factory('command_queue_info', {
        "CONTEXT": CL_QUEUE_CONTEXT,
        "DEVICE": CL_QUEUE_DEVICE,
        "REFERENCE_COUNT": CL_QUEUE_REFERENCE_COUNT,
        "PROPERTIES": CL_QUEUE_PROPERTIES,
})
command_queue_info = c_command_queue_info

cdef BitfieldList c_command_queue_properties = bitfield_list_factory('command_queue_properties', {
        "OUT_OF_ORDER_EXEC_MODE_ENABLE": CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE,
        "PROFILING_ENABLE": CL_QUEUE_PROFILING_ENABLE,
})
command_queue_properties = c_command_queue_properties

cdef IntConstantList c_command_status = int_constant_list_factory('command_status', {
        "COMPLETE": CL_COMPLETE,
        "RUNNING": CL_RUNNING,
        "SUBMITTED": CL_SUBMITTED,
        "QUEUED": CL_QUEUED,
})
command_status = c_command_status

cdef UIntConstantList c_command_type = uint_constant_list_factory('command_type', {
        "NDRANGE_KERNEL": CL_COMMAND_NDRANGE_KERNEL,
        "TASK": CL_COMMAND_TASK,
        "NATIVE_KERNEL": CL_COMMAND_NATIVE_KERNEL,
        "READ_BUFFER": CL_COMMAND_READ_BUFFER,
        "WRITE_BUFFER": CL_COMMAND_WRITE_BUFFER,
        "COPY_BUFFER": CL_COMMAND_COPY_BUFFER,
        "READ_IMAGE": CL_COMMAND_READ_IMAGE,
        "WRITE_IMAGE": CL_COMMAND_WRITE_IMAGE,
        "COPY_IMAGE": CL_COMMAND_COPY_IMAGE,
        "COPY_IMAGE_TO_BUFFER": CL_COMMAND_COPY_IMAGE_TO_BUFFER,
        "COPY_BUFFER_TO_IMAGE": CL_COMMAND_COPY_BUFFER_TO_IMAGE,
        "MAP_BUFFER": CL_COMMAND_MAP_BUFFER,
        "MAP_IMAGE": CL_COMMAND_MAP_IMAGE,
        "UNMAP_MEM_OBJECT": CL_COMMAND_UNMAP_MEM_OBJECT,
        "MARKER": CL_COMMAND_MARKER,
        "ACQUIRE_GL_OBJECTS": CL_COMMAND_ACQUIRE_GL_OBJECTS,
        "RELEASE_GL_OBJECTS": CL_COMMAND_RELEASE_GL_OBJECTS,
})
command_type = c_command_type

cdef UIntConstantList c_context_info = uint_constant_list_factory('context_info', {
        "REFERENCE_COUNT": CL_CONTEXT_REFERENCE_COUNT,
        "DEVICES": CL_CONTEXT_DEVICES,
        "PROPERTIES": CL_CONTEXT_PROPERTIES,
})
context_info = c_context_info

cdef IntConstantList c_context_properties = int_constant_list_factory('context_properties', {
        "PLATFORM": CL_CONTEXT_PLATFORM,
})
context_properties = c_context_properties

cdef BitfieldList c_device_exec_capabilities = bitfield_list_factory('device_exec_capabilities', {
        "KERNEL": CL_EXEC_KERNEL,
        "NATIVE_KERNEL": CL_EXEC_NATIVE_KERNEL,
})
device_exec_capabilities = c_device_exec_capabilities

cdef BitfieldList c_device_fp_config = bitfield_list_factory('device_fp_config', {
        "DENORM": CL_FP_DENORM,
        "INF_NAN": CL_FP_INF_NAN,
        "ROUND_TO_NEAREST": CL_FP_ROUND_TO_NEAREST,
        "ROUND_TO_ZERO": CL_FP_ROUND_TO_ZERO,
        "ROUND_TO_INF": CL_FP_ROUND_TO_INF,
        "FMA": CL_FP_FMA,
})
device_fp_config = c_device_fp_config

cdef UIntConstantList c_device_info = uint_constant_list_factory('device_info', {
        "TYPE": CL_DEVICE_TYPE,
        "VENDOR_ID": CL_DEVICE_VENDOR_ID,
        "MAX_COMPUTE_UNITS": CL_DEVICE_MAX_COMPUTE_UNITS,
        "MAX_WORK_ITEM_DIMENSIONS": CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS,
        "MAX_WORK_GROUP_SIZE": CL_DEVICE_MAX_WORK_GROUP_SIZE,
        "MAX_WORK_ITEM_SIZES": CL_DEVICE_MAX_WORK_ITEM_SIZES,
        "PREFERRED_VECTOR_WIDTH_CHAR": CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR,
        "PREFERRED_VECTOR_WIDTH_SHORT": CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT,
        "PREFERRED_VECTOR_WIDTH_INT": CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT,
        "PREFERRED_VECTOR_WIDTH_LONG": CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG,
        "PREFERRED_VECTOR_WIDTH_FLOAT": CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT,
        "PREFERRED_VECTOR_WIDTH_DOUBLE": CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE,
        "MAX_CLOCK_FREQUENCY": CL_DEVICE_MAX_CLOCK_FREQUENCY,
        "ADDRESS_BITS": CL_DEVICE_ADDRESS_BITS,
        "MAX_READ_IMAGE_ARGS": CL_DEVICE_MAX_READ_IMAGE_ARGS,
        "MAX_WRITE_IMAGE_ARGS": CL_DEVICE_MAX_WRITE_IMAGE_ARGS,
        "MAX_MEM_ALLOC_SIZE": CL_DEVICE_MAX_MEM_ALLOC_SIZE,
        "IMAGE2D_MAX_WIDTH": CL_DEVICE_IMAGE2D_MAX_WIDTH,
        "IMAGE2D_MAX_HEIGHT": CL_DEVICE_IMAGE2D_MAX_HEIGHT,
        "IMAGE3D_MAX_WIDTH": CL_DEVICE_IMAGE3D_MAX_WIDTH,
        "IMAGE3D_MAX_HEIGHT": CL_DEVICE_IMAGE3D_MAX_HEIGHT,
        "IMAGE3D_MAX_DEPTH": CL_DEVICE_IMAGE3D_MAX_DEPTH,
        "IMAGE_SUPPORT": CL_DEVICE_IMAGE_SUPPORT,
        "MAX_PARAMETER_SIZE": CL_DEVICE_MAX_PARAMETER_SIZE,
        "MAX_SAMPLERS": CL_DEVICE_MAX_SAMPLERS,
        "MEM_BASE_ADDR_ALIGN": CL_DEVICE_MEM_BASE_ADDR_ALIGN,
        "MIN_DATA_TYPE_ALIGN_SIZE": CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE,
        "SINGLE_FP_CONFIG": CL_DEVICE_SINGLE_FP_CONFIG,
        "GLOBAL_MEM_CACHE_TYPE": CL_DEVICE_GLOBAL_MEM_CACHE_TYPE,
        "GLOBAL_MEM_CACHELINE_SIZE": CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE,
        "GLOBAL_MEM_CACHE_SIZE": CL_DEVICE_GLOBAL_MEM_CACHE_SIZE,
        "GLOBAL_MEM_SIZE": CL_DEVICE_GLOBAL_MEM_SIZE,
        "MAX_CONSTANT_BUFFER_SIZE": CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE,
        "MAX_CONSTANT_ARGS": CL_DEVICE_MAX_CONSTANT_ARGS,
        "LOCAL_MEM_TYPE": CL_DEVICE_LOCAL_MEM_TYPE,
        "LOCAL_MEM_SIZE": CL_DEVICE_LOCAL_MEM_SIZE,
        "ERROR_CORRECTION_SUPPORT": CL_DEVICE_ERROR_CORRECTION_SUPPORT,
        "PROFILING_TIMER_RESOLUTION": CL_DEVICE_PROFILING_TIMER_RESOLUTION,
        "ENDIAN_LITTLE": CL_DEVICE_ENDIAN_LITTLE,
        "AVAILABLE": CL_DEVICE_AVAILABLE,
        "COMPILER_AVAILABLE": CL_DEVICE_COMPILER_AVAILABLE,
        "EXECUTION_CAPABILITIES": CL_DEVICE_EXECUTION_CAPABILITIES,
        "QUEUE_PROPERTIES": CL_DEVICE_QUEUE_PROPERTIES,
        "NAME": CL_DEVICE_NAME,
        "VENDOR": CL_DEVICE_VENDOR,
        "DRIVER_VERSION": CL_DRIVER_VERSION,
        "PROFILE": CL_DEVICE_PROFILE,
        "VERSION": CL_DEVICE_VERSION,
        "EXTENSIONS": CL_DEVICE_EXTENSIONS,
        "PLATFORM": CL_DEVICE_PLATFORM,
})
device_info = c_device_info

cdef UIntConstantList c_device_local_mem_type = uint_constant_list_factory('device_local_mem_type', {
        "LOCAL": CL_LOCAL,
        "GLOBAL": CL_GLOBAL,
})
device_local_mem_type = c_device_local_mem_type

cdef UIntConstantList c_device_mem_cache_type = uint_constant_list_factory('device_mem_cache_type', {
        "NONE": CL_NONE,
        "READ_ONLY_CACHE": CL_READ_ONLY_CACHE,
        "READ_WRITE_CACHE": CL_READ_WRITE_CACHE,
})
device_mem_cache_type = c_device_mem_cache_type

cdef BitfieldList c_device_type = bitfield_list_factory('device_type', {
        "DEFAULT": CL_DEVICE_TYPE_DEFAULT,
        "CPU": CL_DEVICE_TYPE_CPU,
        "GPU": CL_DEVICE_TYPE_GPU,
        "ACCELERATOR": CL_DEVICE_TYPE_ACCELERATOR,
        "ALL": CL_DEVICE_TYPE_ALL,
})
device_type = c_device_type

cdef UIntConstantList c_event_info = uint_constant_list_factory('event_info', {
        "COMMAND_QUEUE": CL_EVENT_COMMAND_QUEUE,
        "COMMAND_TYPE": CL_EVENT_COMMAND_TYPE,
        "REFERENCE_COUNT": CL_EVENT_REFERENCE_COUNT,
        "COMMAND_EXECUTION_STATUS": CL_EVENT_COMMAND_EXECUTION_STATUS,
})
event_info = c_event_info

cdef UIntConstantList c_filter_mode = uint_constant_list_factory('filter_mode', {
        "NEAREST": CL_FILTER_NEAREST,
        "LINEAR": CL_FILTER_LINEAR,
})
filter_mode = c_filter_mode

cdef UIntConstantList c_image_info = uint_constant_list_factory('image_info', {
        "FORMAT": CL_IMAGE_FORMAT,
        "ELEMENT_SIZE": CL_IMAGE_ELEMENT_SIZE,
        "ROW_PITCH": CL_IMAGE_ROW_PITCH,
        "SLICE_PITCH": CL_IMAGE_SLICE_PITCH,
        "WIDTH": CL_IMAGE_WIDTH,
        "HEIGHT": CL_IMAGE_HEIGHT,
        "DEPTH": CL_IMAGE_DEPTH,
})
image_info = c_image_info

cdef UIntConstantList c_kernel_info = uint_constant_list_factory('kernel_info', {
        "FUNCTION_NAME": CL_KERNEL_FUNCTION_NAME,
        "NUM_ARGS": CL_KERNEL_NUM_ARGS,
        "REFERENCE_COUNT": CL_KERNEL_REFERENCE_COUNT,
        "CONTEXT": CL_KERNEL_CONTEXT,
        "PROGRAM": CL_KERNEL_PROGRAM,
})
kernel_info = c_kernel_info

cdef UIntConstantList c_kernel_work_group_info = uint_constant_list_factory('kernel_work_group_info', {
        "WORK_GROUP_SIZE": CL_KERNEL_WORK_GROUP_SIZE,
        "COMPILE_WORK_GROUP_SIZE": CL_KERNEL_COMPILE_WORK_GROUP_SIZE,
        "LOCAL_MEM_SIZE": CL_KERNEL_LOCAL_MEM_SIZE,
})
kernel_work_group_info = c_kernel_work_group_info

cdef BitfieldList c_map_flags = bitfield_list_factory('map_flags', {
        "READ": CL_MAP_READ,
        "WRITE": CL_MAP_WRITE,
})
map_flags = c_map_flags

cdef BitfieldList c_mem_flags = bitfield_list_factory('mem_flags', {
        "READ_WRITE": CL_MEM_READ_WRITE,
        "WRITE_ONLY": CL_MEM_WRITE_ONLY,
        "READ_ONLY": CL_MEM_READ_ONLY,
        "USE_HOST_PTR": CL_MEM_USE_HOST_PTR,
        "ALLOC_HOST_PTR": CL_MEM_ALLOC_HOST_PTR,
        "COPY_HOST_PTR": CL_MEM_COPY_HOST_PTR,
})
mem_flags = c_mem_flags

cdef UIntConstantList c_mem_info = uint_constant_list_factory('mem_info', {
        "TYPE": CL_MEM_TYPE,
        "FLAGS": CL_MEM_FLAGS,
        "SIZE": CL_MEM_SIZE,
        "HOST_PTR": CL_MEM_HOST_PTR,
        "MAP_COUNT": CL_MEM_MAP_COUNT,
        "REFERENCE_COUNT": CL_MEM_REFERENCE_COUNT,
        "CONTEXT": CL_MEM_CONTEXT,
})
mem_info = c_mem_info

cdef UIntConstantList c_mem_object_type = uint_constant_list_factory('mem_object_type', {
        "BUFFER": CL_MEM_OBJECT_BUFFER,
        "IMAGE2D": CL_MEM_OBJECT_IMAGE2D,
        "IMAGE3D": CL_MEM_OBJECT_IMAGE3D,
})
mem_object_type = c_mem_object_type

cdef UIntConstantList c_platform_info = uint_constant_list_factory('platform_info', {
        "PROFILE": CL_PLATFORM_PROFILE,
        "VERSION": CL_PLATFORM_VERSION,
        "NAME": CL_PLATFORM_NAME,
        "VENDOR": CL_PLATFORM_VENDOR,
        "EXTENSIONS": CL_PLATFORM_EXTENSIONS,
})
platform_info = c_platform_info

cdef UIntConstantList c_profiling_info = uint_constant_list_factory('profiling_info', {
        "QUEUED": CL_PROFILING_COMMAND_QUEUED,
        "SUBMIT": CL_PROFILING_COMMAND_SUBMIT,
        "START": CL_PROFILING_COMMAND_START,
        "END": CL_PROFILING_COMMAND_END,
})
profiling_info = c_profiling_info

cdef UIntConstantList c_program_build_info = uint_constant_list_factory('program_build_info', {
        "STATUS": CL_PROGRAM_BUILD_STATUS,
        "OPTIONS": CL_PROGRAM_BUILD_OPTIONS,
        "LOG": CL_PROGRAM_BUILD_LOG,
})
program_build_info = c_program_build_info

cdef UIntConstantList c_program_info = uint_constant_list_factory('program_info', {
        "REFERENCE_COUNT": CL_PROGRAM_REFERENCE_COUNT,
        "CONTEXT": CL_PROGRAM_CONTEXT,
        "NUM_DEVICES": CL_PROGRAM_NUM_DEVICES,
        "DEVICES": CL_PROGRAM_DEVICES,
        "SOURCE": CL_PROGRAM_SOURCE,
        "BINARY_SIZES": CL_PROGRAM_BINARY_SIZES,
        "BINARIES": CL_PROGRAM_BINARIES,
})
program_info = c_program_info

cdef UIntConstantList c_sampler_info = uint_constant_list_factory('sampler_info', {
        "REFERENCE_COUNT": CL_SAMPLER_REFERENCE_COUNT,
        "CONTEXT": CL_SAMPLER_CONTEXT,
        "NORMALIZED_COORDS": CL_SAMPLER_NORMALIZED_COORDS,
        "ADDRESSING_MODE": CL_SAMPLER_ADDRESSING_MODE,
        "FILTER_MODE": CL_SAMPLER_FILTER_MODE,
})
sampler_info = c_sampler_info

